#ifndef __LOG_H__
#define __LOG_H__

#include "head.h"


#define LOGV_ENABLE 1
#define LOGD_ENABLE 1
#define LOGI_ENABLE 1
#define LOGW_ENABLE 1
#define LOGE_ENABLE 1

#ifdef LOGV
#undef LOGV
#endif



#ifdef LOGD
#undef LOGD
#endif


#ifdef LOGI
#undef LOGI
#endif


#ifdef LOGW
#undef LOGW
#endif


#ifdef LOGE
#undef LOGE
#endif



/**
*Function:
*Description:
*Input:
*Output:
*Return:
**/
static void log_debug(const char *tag, int facility, const char *format,...){
	va_list args;
	va_start(args, format);

	openlog(tag, LOG_PID, facility);

	vsyslog(LOG_DEBUG, format, args);

	va_end(args);

	//vsyslog：它和syslog功能一样，负责写入日志，只是参数格式不同。
	closelog();
}
/**
* Function:
* Description:
* Input:
* Output:
* Return:
**/
static void log_info(const char *tag, int facility, const char *format,...)
{
	va_list args;
	va_start(args, format);

	openlog(tag, LOG_PID,facility);
	vsyslog(LOG_INFO, format, args);

	va_end(args);
	
	closelog();
}

/**
* Function:
* Description:
* Input:
* Output:
* Return:
**/

static void log_notice(const char *tag, int facility, const char *format,...)
{
	va_list args;
	va_start(args, format);

	openlog(tag, LOG_PID,facility);
	vsyslog(LOG_NOTICE, format, args);

	va_end(args);
	
	closelog();
}


static void log_warning(const char *tag, int facility, const char *format,...)
{
	va_list args;
	va_start(args, format);

	openlog(tag, LOG_PID, facility);
		vsyslog(LOG_WARNING, format, args);
	va_end(args);

	closelog();
}


static void log_err(const char *tag, int facility, const char *format,...)
{
	va_list args;

	va_start(args, format);

	openlog(tag, LOG_PID, facility);
		vsyslog(LOG_ERR, format, args);
	va_end(args);
	closelog();
}


#if defined(COMPATIBLE_DEBUG_LOG)
#define LOGV(cond, msg,...) \
	if(cond && LOGV_ENABLE) \
	{	printf("[VER][%s][%d]:"msg, __FUNCTION__,__LINE__,##__VA_ARGS__);}

#define LOGD(cond, msg,...) \
	if(cond && LOGD_ENABLE) \
	{ printf("[VER][%s][%d]:"msg, __FUNCTION__, __LINE__,##__VA_ARGS__); }

#define LOGI(cond, msg,...) \
	if(cond && LOGI_ENABLE) \
	{ printf("[VER][%s][%d]:"msg, __FUNCTION__, __LINE__,##__VA_ARGS__); }

#define LOGW(cond, msg,...) \
	if(cond && LOGW_ENABLE) \
	{ printf("[VER][%s][%d]:"msg, __FUNCTION__, __LINE__,##__VA_ARGS__); }

#define LOGE(cond, msg,...) \
	if(cond && LOGE_ENABLE) \
	{ printf("[VER][%s][%d]:"msg, __FUNCTION__, __LINE__,##__VA_ARGS__); }

#else

#define LOGV(cond,msg,...) \
	log_debug(#cond, LOG_LOCAL3, "[VER][%s][%d] : "msg,__FUNCTION__,__LINE__,##__VA_ARGS__)

#define LOGD(cond,msg,...) \
	log_info(#cond, LOG_LOCAL3, "[DEB][%s][%d]" msg, __FUNCTION__, __LINE__,##__VA_ARGS__)
#define LOGI(cond,msg,...) \
	log_notice(#cond, LOG_LOCAL3, "[INF][%s][%d]", msg, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#define LOGW(cond,msg,...) \
	log_warning(#cond, LOG_LOCAL3, "[WAR][%s][%d]", msg, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#define LOGE(cond,msg,...) \
	log_err(#cond, LOG_LOCAL3, "[ERR][%s][%d]", msg, __FUNCTION__, __LINE__, ##__VA_ARGS__)

#endif

#endif
